package com.gloaba.common.mongo.service;


import org.springframework.data.mongodb.core.aggregation.Aggregation;
import org.springframework.data.mongodb.core.query.Query;

import java.util.List;
import java.util.Map;

public interface IMongoService<T> extends IBaseMongoDocumentService {

    /**
     * 保存对象
     *
     * @param t 对象实体
     */
    void saveEntity(T t);

    /**
     * 保存对象
     *
     * @param t 对象实体
     */
    void saveEntity(T t,String collectionName);

    /**
     * 根据ID修改实体
     *
     * @param t 对象实体
     * @param id 主键
     * @return
     */
    long updateEntityById(T t, String id);

    /**
     * 根据查询条件修改实体
     *
     * @param t 对象实体
     * @param condition 更新条件，仅支持and、精确匹配
     * @return
     */
    long updateEntityByCondition(T t, Map<String,Object> condition);

    /**
     * 根据条件修改实体
     *
     * @param t 对象实体
     * @param query 查询条件
     * @return
     */
    long updateEntity(T t, Query query);

    /**
     * 根据ID进行删除
     *
     * @param id 主键
     */
    void deleteEntityById(Long id);

    /**
     * 查询所有实体
     *
     * @return
     */
    List<T> findAll();

    <T> List<T> findAggregateList(String collectionName, Aggregation aggregation, Class<T> clazz);

//    TableDataInfo<T> findList(Query query, Integer pageIndex, Integer pageSize);
}
